package cn.tannn.tcache.resp;

import io.netty.channel.ChannelHandlerContext;

import static cn.tannn.tcache.core.Command.*;
import static cn.tannn.tcache.resp.Protocol.writeByteBuf;

/**
 * 字符串协议
 *
 * @author <a href="https://t.tannn.cn/">tnnn</a>
 * @version V1.0
 * @date 2024/6/15 下午9:29
 */
public class StringProtocol {

    /**
     * 封装数据 - Bulk Strings,
     *
     * @param ctx     ChannelHandlerContext
     * @param content Bulk string
     */
    public static void bulkString(ChannelHandlerContext ctx, String content) {
        writeByteBuf(ctx, bulkStringEncode(content));
    }


    /**
     * 处理 Bulk Strings 协议数据的格式 , 第一个字节是 "$"
     *
     * @param content 数据
     * @return 格式化的数据
     */
    public static String bulkStringEncode(String content) {
        String ret;
        if (content == null) {
            // null
            ret = "$-1";
        } else if (content.isEmpty()) {
            // ""
            ret = "$0" + CRLF;
        } else {
            ret = BULK_PREFIX + content.getBytes().length + CRLF + content;
        }
        return ret + CRLF;
    }

    /**
     * 封装数据 - Simple Strings, 第一个字节是 "+"
     *
     * @param ctx     ChannelHandlerContext
     * @param content Simple string
     */
    public static void simpleString(ChannelHandlerContext ctx, String content) {
        String ret;
        if (content == null) {
            // null
            ret = "$-1";
        } else if (content.isEmpty()) {
            // ""
            ret = "$0" + CRLF;
        } else {
            ret = STR_PREFIX + content;
        }
        writeByteBuf(ctx, ret + CRLF);
    }
}
